package controle;

import java.lang.reflect.ParameterizedType;

import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import util.FacesUtil;

public abstract class AbstractBean <T>{
	
	private T entidade = null;	

	@SuppressWarnings("unchecked")
	private final Class<T> entidadeClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
	
	public AbstractBean() {
		newInstanceEntidade();
	}
	
	private void newInstanceEntidade(){
		try {
			this.entidade = entidadeClass.newInstance();			
		} catch (InstantiationException e) {			
			e.printStackTrace();
		} catch (IllegalAccessException e) {			
			e.printStackTrace();
		}
	}
	
	public void clearEntidade(){
		newInstanceEntidade();
	}
	
	public void addError(String message) {
        FacesUtil.addError(message);
    }

    public void addWarning(String message) {
        FacesUtil.addWarning(message);
    }

    public void addInfo(String message) {
        FacesUtil.addInfo(message);
    }
   
	public T getEntidade() {
		return entidade;
	}

	public void setEntidade(T entidade) {
		this.entidade = entidade;
	}
	
	public ExternalContext getExternalContext(){
		return FacesUtil.getExternalContext();
	}
	
	public HttpSession getSession(){
		return FacesUtil.getSession();
	}
	
	protected String getParametro(String param ){
		FacesContext fc = FacesContext.getCurrentInstance();  
		String result = fc.getExternalContext().getRequestParameterMap().get(param);
		return result;		
	}
		
	

    
	
}